// -----------------------------------------------------------------------
//  <copyright file="TypeExtensions.cs" company="LiuliuSoft">
//      Copyright (c) 2022-2024 DaprPlus. All rights reserved.
//  </copyright>
//  <site>https://www.dapr.plus</site>
//  <last-editor>郭明锋</last-editor>
//  <last-date>2024-05-30 02:05</last-date>
// -----------------------------------------------------------------------

namespace DaprPlus.Extensions;

public static class TypeExtensions
{
    public static bool IsSimpleType(this Type type)
    {
        // 检查是否是值类型（包括枚举类型）
        if (type.IsValueType)
        {
            return true;
        }

        // 检查是否是字符串类型
        if (type == typeof(string))
        {
            return true;
        }

        // 检查是否是特殊简单类型（如DateTime、TimeSpan等）
        if (IsSpecialSimpleType(type))
        {
            return true;
        }

        // 检查是否是可空类型
        if (IsNullable(type))
        {
            // 获取可空类型的基础类型
            var underlyingType = Nullable.GetUnderlyingType(type);
            if (underlyingType == null)
            {
                return true;
            }
            return IsSimpleType(underlyingType);
        }

        return false;
    }

    private static bool IsSpecialSimpleType(Type type)
    {
        // 在这里可以添加其他特殊简单类型的判断逻辑
        return type == typeof(DateTime) || type == typeof(TimeSpan);
    }

    private static bool IsNullable(Type type)
    {
        return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>);
    }
}
